/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.cef.generator.coreGenerator.base.serializer.changeser.valueobject.serializer;

import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
import com.inspur.edp.cef.designtime.api.IGspCommonDataType;
import com.inspur.edp.cef.generator.coreGenerator.base.mgrGenerator.ManagerGeneratorContext;
import com.inspur.edp.cef.generator.coreGenerator.base.serializer.changeser.dataType.SerGetTypesGenerator;
import com.inspur.edp.cef.spi.jsonser.valueobj.AbstractValueObjSerializer;
import com.inspur.edp.cef.spi.jsonser.valueobj.ValueObjDataSerializerItem;
import org.eclipse.jdt.core.dom.ParameterizedType;

import java.util.ArrayList;

public class ValueObjGetTypesGenerator extends SerGetTypesGenerator {
    public ValueObjGetTypesGenerator(IGspCommonDataType dataType, ManagerGeneratorContext mgrContext) {
        super(dataType, mgrContext);
    }

    @Override
    protected TypeInfo getReturnType() {
        addImport(AbstractValueObjSerializer.class.getTypeName());
        TypeInfo typeInfo = new TypeInfo(ArrayList.class);
        typeInfo.setIsParameterizedType(true);
        typeInfo.getArguments().add(new TypeInfo(AbstractValueObjSerializer.class));

        return typeInfo;
    }

    @Override
    protected void setListType(ParameterizedType parameterizedType) {
        parameterizedType.typeArguments().add(new TypeInfo(AbstractValueObjSerializer.class).getType(ast, mgrContext.getProjContext()));
    }

    @Override
    protected String getSerItemTypeName() {
        addImport(ValueObjDataSerializerItem.class.getTypeName());
        return "ValueObjDataSerializerItem";
    }

    //
//	@Override
//	protected LocalDeclarationStatementSyntax getInitStatement()
//	{
//		return SyntaxFactory.LocalDeclarationStatement(SyntaxFactory.VariableDeclaration(TypeUtils.getTypeSyntax(java.util.ArrayList<AbstractValueObjSerializer>.class)).WithVariables(SyntaxFactory.<VariableDeclaratorSyntax>SingletonSeparatedList(SyntaxFactory.VariableDeclarator(SyntaxFactory.Identifier("list")).WithInitializer(SyntaxFactory.EqualsValueClause(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression))))));
//	}

//	@Override
//	protected StatementSyntax getNewListStatement()
//	{
//		return SyntaxFactory.ExpressionStatement(SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, SyntaxFactory.IdentifierName("list"), SyntaxFactory.ObjectCreationExpression(TypeUtils.getTypeSyntax(java.util.ArrayList<AbstractValueObjSerializer>.class)).WithArgumentList(SyntaxFactory.ArgumentList())));
//	}
}
